Participant info

Agency task: Agency decisions

Model: Agency decisions by VoC

## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: stage_1_choice ~ voc_z * condition_trial * age_z + (voc_z * condition_trial || 
## Model:     subject_id)
## Data: agency_model_data
## Df full model: 12
##                        Effect df      Chisq p.value
## 1                       voc_z  1 166.62 ***   <.001
## 2             condition_trial  1       0.07    .796
## 3                       age_z  1       0.00    .965
## 4       voc_z:condition_trial  1  51.94 ***   <.001
## 5                 voc_z:age_z  1  12.28 ***   <.001
## 6       condition_trial:age_z  1       0.01    .941
## 7 voc_z:condition_trial:age_z  1     5.26 *    .022
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: stage_1_choice ~ voc_z * condition_trial * age_z + (1 + re1.voc_z +  
##     re1.condition_trial + re1.voc_z_by_condition_trial || subject_id)
##    Data: data
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
## 
##      AIC      BIC   logLik deviance df.resid 
##  38797.4  38902.4 -19386.7  38773.4    46747 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -37.884  -0.383   0.172   0.500  37.176 
## 
## Random effects:
##  Groups       Name                         Variance Std.Dev.
##  subject_id   (Intercept)                  4.51651  2.1252  
##  subject_id.1 re1.voc_z                    0.49713  0.7051  
##  subject_id.2 re1.condition_trial          0.82459  0.9081  
##  subject_id.3 re1.voc_z_by_condition_trial 0.04873  0.2207  
## Number of obs: 46759, groups:  subject_id, 150
## 
## Fixed effects:
##                              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  1.262232   0.175381   7.197 6.15e-13 ***
## voc_z                        1.094665   0.061065  17.926  < 2e-16 ***
## condition_trial             -0.020084   0.077009  -0.261 0.794244    
## age_z                        0.007827   0.174968   0.045 0.964321    
## voc_z:condition_trial        0.200551   0.025091   7.993 1.32e-15 ***
## voc_z:age_z                  0.218518   0.061013   3.581 0.000342 ***
## condition_trial:age_z       -0.005669   0.076840  -0.074 0.941189    
## voc_z:condition_trial:age_z  0.058323   0.025115   2.322 0.020219 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) voc_z  cndtn_ age_z  vc_z:c_ vc_z:g_ cnd_:_
## voc_z        0.012                                            
## conditn_trl  0.012  0.007                                     
## age_z        0.000  0.001 -0.002                              
## vc_z:cndtn_  0.006  0.043  0.034  0.001                       
## voc_z:age_z  0.002 -0.006  0.001  0.010 -0.001                
## cndtn_trl:_ -0.002  0.001 -0.009  0.007  0.005   0.004        
## vc_z:cnd_:_  0.001  0.000  0.005  0.003  0.000   0.036   0.033
Predictor Log-Odds SE Statistic p
intercept 1.26 0.18 7.20 <0.001
VoC 1.09 0.06 17.93 <0.001
trial -0.02 0.08 -0.26 0.794
age 0.01 0.17 0.04 0.964
VoC x trial 0.20 0.03 7.99 <0.001
VoC x age 0.22 0.06 3.58 <0.001
trial x age -0.01 0.08 -0.07 0.941
VoC x trial x age 0.06 0.03 2.32 0.020

Plot: Sensitivity to the value of choice

Plot: Sensitivity to value of choice with continuous age

Summary stats: Sensitivity to value of control

Agency decision reaction times

Model: Agency RTs by VoC

## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: agencyLogRT ~ zAge * zAbsVoC * zTrialOfCond + (zAbsVoC * zTrialOfCond | 
## Model:     subject_id)
## Data: banditTask.RT.data
##                      Effect         df         F p.value
## 1                      zAge  1, 147.99      0.63    .427
## 2                   zAbsVoC  1, 148.61 17.05 ***   <.001
## 3              zTrialOfCond  1, 147.97 71.56 ***   <.001
## 4              zAge:zAbsVoC  1, 148.39    4.43 *    .037
## 5         zAge:zTrialOfCond  1, 147.97      0.09    .767
## 6      zAbsVoC:zTrialOfCond 1, 1560.95      0.21    .647
## 7 zAge:zAbsVoC:zTrialOfCond 1, 1562.56      0.61    .435
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: 
## agencyLogRT ~ zAge * zAbsVoC * zTrialOfCond + (zAbsVoC * zTrialOfCond |  
##     subject_id)
##    Data: data
## Control: lmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
## 
## REML criterion at convergence: 62132.1
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -5.3588 -0.6227 -0.0891  0.5275  5.7413 
## 
## Random effects:
##  Groups     Name                 Variance  Std.Dev. Corr             
##  subject_id (Intercept)          1.213e-01 0.34823                   
##             zAbsVoC              2.648e-04 0.01627  -0.29            
##             zTrialOfCond         1.790e-02 0.13379   0.05  0.00      
##             zAbsVoC:zTrialOfCond 2.798e-05 0.00529  -0.70  0.52 -0.67
##  Residual                        2.147e-01 0.46336                   
## Number of obs: 46759, groups:  subject_id, 150
## 
## Fixed effects:
##                             Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)               -4.785e-02  2.851e-02  1.480e+02  -1.678   0.0954 .  
## zAge                      -2.269e-02  2.851e-02  1.480e+02  -0.796   0.4275    
## zAbsVoC                   -1.041e-02  2.521e-03  1.486e+02  -4.130 6.04e-05 ***
## zTrialOfCond              -9.417e-02  1.113e-02  1.480e+02  -8.459 2.39e-14 ***
## zAge:zAbsVoC              -5.307e-03  2.520e-03  1.484e+02  -2.106   0.0369 *  
## zAge:zTrialOfCond         -3.300e-03  1.113e-02  1.480e+02  -0.297   0.7673    
## zAbsVoC:zTrialOfCond      -1.000e-03  2.187e-03  1.561e+03  -0.457   0.6475    
## zAge:zAbsVoC:zTrialOfCond  1.709e-03  2.187e-03  1.563e+03   0.781   0.4346    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) zAge   zAbsVC zTrlOC zAg:AVC zA:TOC zAVC:T
## zAge         0.004                                           
## zAbsVoC     -0.154 -0.001                                    
## zTrialOfCnd  0.053  0.000 -0.001                             
## zAge:zAbsVC -0.001 -0.154  0.002  0.000                      
## zAg:zTrlOfC  0.000  0.053  0.000  0.004 -0.001               
## zAbsVC:zTOC -0.138  0.000  0.055 -0.129 -0.001   0.000       
## zAg:AVC:TOC  0.000 -0.138 -0.001  0.000  0.054  -0.129 -0.001
## optimizer (bobyqa) convergence code: 0 (OK)
## boundary (singular) fit: see help('isSingular')
Predictor Estimates SE p
intercept -0.05 0.03 0.093
age -0.02 0.03 0.426
VoC magnitude -0.01 0.00 <0.001
trial -0.09 0.01 <0.001
age x VoC magnitude -0.01 0.00 0.035
age x trial -0.00 0.01 0.767
VoC magnitude x trial -0.00 0.00 0.647
age x VoC magnitude x trial 0.00 0.00 0.435

Plot: Agency RTs by VoC

Agency task: Machine selection

Model: Optimal machine choices across trials by condition and age

## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: stage_2_acc ~ context * condition_trial * age_z + (context * 
## Model:     condition_trial || subject_id)
## Data: machine_model_data
## Df full model: 12
##                          Effect df     Chisq p.value
## 1                       context  1 29.27 ***   <.001
## 2               condition_trial  1 69.50 ***   <.001
## 3                         age_z  1 15.49 ***   <.001
## 4       context:condition_trial  1    5.47 *    .019
## 5                 context:age_z  1      0.74    .389
## 6         condition_trial:age_z  1      0.70    .404
## 7 context:condition_trial:age_z  1      1.71    .191
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: stage_2_acc ~ context * condition_trial * age_z + (1 + re1.context1 +  
##     re1.condition_trial + re1.context1_by_condition_trial ||      subject_id)
##    Data: data
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
## 
##      AIC      BIC   logLik deviance df.resid 
##  15084.2  15179.9  -7530.1  15060.2    21318 
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -10.7613   0.0972   0.2017   0.4001   2.4112 
## 
## Random effects:
##  Groups       Name                            Variance Std.Dev.
##  subject_id   (Intercept)                     1.7634   1.3279  
##  subject_id.1 re1.context1                    0.6000   0.7746  
##  subject_id.2 re1.condition_trial             0.2931   0.5414  
##  subject_id.3 re1.context1_by_condition_trial 0.1118   0.3344  
## Number of obs: 21330, groups:  subject_id, 149
## 
## Fixed effects:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     2.31547    0.11532  20.078  < 2e-16 ***
## context1                        0.40971    0.07119   5.755 8.65e-09 ***
## condition_trial                 0.49629    0.05390   9.208  < 2e-16 ***
## age_z                           0.45938    0.11421   4.022 5.77e-05 ***
## context1:condition_trial        0.09387    0.03923   2.393   0.0167 *  
## context1:age_z                 -0.06268    0.07112  -0.881   0.3782    
## condition_trial:age_z           0.04491    0.05342   0.841   0.4006    
## context1:condition_trial:age_z -0.05214    0.03913  -1.333   0.1827    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) cntxt1 cndtn_ age_z  cntxt1:c_ cntxt1:g_ cnd_:_
## context1     0.033                                                
## conditn_trl  0.077  0.031                                         
## age_z        0.038  0.004  0.011                                  
## cntxt1:cnd_  0.028  0.108  0.077  0.000                           
## contxt1:g_z  0.000  0.054 -0.003  0.023  0.014                    
## cndtn_trl:_  0.007 -0.002  0.071  0.061  0.003     0.021          
## cntxt1:c_:_ -0.003  0.014  0.004  0.017  0.106     0.106     0.066
Predictor Log-Odds SE Statistic p
intercept 2.32 0.12 20.08 <0.001
condition 0.41 0.07 5.76 <0.001
trial 0.50 0.05 9.21 <0.001
age 0.46 0.11 4.02 <0.001
condition x trial 0.09 0.04 2.39 0.017
condition x age -0.06 0.07 -0.88 0.378
trial x age 0.04 0.05 0.84 0.401
condition x trial x age -0.05 0.04 -1.33 0.183

Plot: Proportion optimal machine selections across age groups and trials

Explicit reward knowledge task

Explicit reward knowledge task: summary stats

Model: Explicit reward knowledge by age and true probabilities

## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: error ~ zTrueProb * zAge + (1 | subject_id)
## Data: explicitKnow.filtered
##           Effect        df         F p.value
## 1      zTrueProb 1, 748.00 23.42 ***   <.001
## 2           zAge 1, 148.00   7.59 **    .007
## 3 zTrueProb:zAge 1, 748.00      0.52    .473
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: error ~ zTrueProb * zAge + (1 | subject_id)
##    Data: data
## 
## REML criterion at convergence: 3093.5
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -1.5243 -0.7034 -0.1905  0.4417  4.1618 
## 
## Random effects:
##  Groups     Name        Variance Std.Dev.
##  subject_id (Intercept) 0.1159   0.3405  
##  Residual               1.6947   1.3018  
## Number of obs: 900, groups:  subject_id, 150
## 
## Fixed effects:
##                 Estimate Std. Error        df t value Pr(>|t|)    
## (Intercept)      1.58778    0.05154 148.00000  30.810  < 2e-16 ***
## zTrueProb       -0.21012    0.04342 747.99999  -4.840 1.58e-06 ***
## zAge            -0.14204    0.05156 148.00000  -2.755  0.00661 ** 
## zTrueProb:zAge  -0.03119    0.04344 747.99999  -0.718  0.47293    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) zTrPrb zAge 
## zTrueProb   0.000              
## zAge        0.000  0.000       
## zTruPrb:zAg 0.000  0.000  0.000

Plot: Explicit reward knowledge

LS0tCnRpdGxlOiAiRTIgVm9DIEFuYWx5c2VzIFBhcnQgMjogUmVncmVzc2lvbiBBbmFseXNlcyIKZGF0ZTogMy8yNy8yNApvdXRwdXQ6CiAgICBodG1sX2RvY3VtZW50OgogICAgICAgIGRmX3ByaW50OiAncGFnZWQnCiAgICAgICAgdG9jOiB0cnVlCiAgICAgICAgdG9jX2Zsb2F0OgogICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICAgICAgICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgICAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlCiAgICAgICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgICAgIHNlbGZfY29udGFpbmVkOiB0cnVlCi0tLQoKYGBge3IgY2h1bmsgc2V0dGluZ3MsIGluY2x1ZGUgPSBGQUxTRX0KIyBzZXQgY2h1bmsgc2V0dGluZ3MKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UpCmtuaXRyOjpvcHRzX2NodW5rJHNldChkcGk9NjAwKQprbml0cjo6b3B0c19rbml0JHNldChyb290LmRpciA9IHJwcm9qcm9vdDo6ZmluZF9yc3R1ZGlvX3Jvb3RfZmlsZSgpKQpgYGAKCmBgYHtyIGxvYWQgbGlicmFyaWVzLCBpbmNsdWRlID0gRn0KCiNsb2FkIGxpYnJhcmllcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShnbHVlKQpsaWJyYXJ5KGFmZXgpCmxpYnJhcnkoc2pQbG90KQoKI2xvYWQgc2NyaXB0cwpzb3VyY2UoJ2FuYWx5c2lzX3NjcmlwdHMvdm9jX2Z1bmN0aW9ucy5SJykKYGBgCgpgYGB7ciBpbXBvcnQgZGF0YX0KCiMgcmVhZCBpbiBsZWFybmluZyBkYXRhCmxlYXJuaW5nX2RhdGEgPC0gcmVhZF9jc3YoJ2RhdGEvcHJvY2Vzc2VkL2xlYXJuaW5nX2RhdGEuY3N2JykKCiMgcmVhZCBpbiBwYXJ0aWNpcGFudCBhZ2VzCnBhcnRpY2lwYW50X2FnZXMgPC0gcmVhZF9jc3YoJ2RhdGEvdm9jX3N1Yl9pbmZvLmNzdicpIAoKIyBqb2luCmxlYXJuaW5nX2RhdGEgPC0gaW5uZXJfam9pbihsZWFybmluZ19kYXRhLCBwYXJ0aWNpcGFudF9hZ2VzLCBieSA9IGMoJ3N1YmplY3RfaWQnKSkgJT4lCiAgbXV0YXRlKGFnZV9ncm91cCA9IGNhc2Vfd2hlbihhZ2UgPCAxMyB+ICdDaGlsZHJlbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPCAxOCAmIGFnZSA+IDEyLjk5IH4gJ0Fkb2xlc2NlbnRzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZSA+IDE4IH4gJ0FkdWx0cycpKQoKbGVhcm5pbmdfZGF0YSRhZ2VfZ3JvdXAgPC0gZmFjdG9yKGxlYXJuaW5nX2RhdGEkYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCgpgYGAKCmBgYHtyIHByb2Nlc3MgbGVhcm5pbmcgZGF0YX0KbGVhcm5pbmdfZGF0YSA8LSBsZWFybmluZ19kYXRhICU+JQogIG11dGF0ZShldl9jaG9pY2UgPSBjYXNlX3doZW4oY29udGV4dCA9PSAwIH4gOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPT0gMSB+IDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID09IDIgfiA1KSwKICAgICAgICAgZXZfY29tcCA9IDUgKyBvZmZlciwKICAgICAgICAgdm9jID0gZXZfY2hvaWNlIC0gZXZfY29tcCwKICAgICAgICAgYmV0dGVyX21hY2hpbmUgPSBjYXNlX3doZW4ocmV3YXJkX3Byb2JfTCA+IHJld2FyZF9wcm9iX1IgfiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdhcmRfcHJvYl9MIDwgcmV3YXJkX3Byb2JfUiB+IDAsCiAgICAgICAgICksCiAgICAgICAgIHN0YWdlXzJfYWNjID0gY2FzZV93aGVuKHN0YWdlXzJfY2hvaWNlID09IGJldHRlcl9tYWNoaW5lIH4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2VfMl9jaG9pY2UgIT0gYmV0dGVyX21hY2hpbmUgfiAwKSkgJT4lCiAgZ3JvdXBfYnkoc3ViamVjdF9pZCwgY29udGV4dCkgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbl90cmlhbCA9IHJhbmsodHJpYWwpLAogICAgICAgICBibG9jayA9IGZsb29yKCh0cmlhbC0xKS8yMSArIDEpKQoKIyBleGNsdWRlIGZpcnN0LXN0YWdlIG1pc3NlcyBhbmQgZmlyc3Qtc3RhZ2UgUlQgPCAxNTAgbXMKbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCA8LSBsZWFybmluZ19kYXRhICU+JQogIGZpbHRlcihzdGFnZV8xX3J0ID4gMTUwKQoKYGBgCgojIFBhcnRpY2lwYW50IGluZm8KYGBge3Igc3ViamVjdCBpbmZvcm1hdGlvbn0Kc3ViX2luZm8gPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KHN1YmplY3RfaWQsIGFnZSwgYWdlX2dyb3VwLCBnZW5kZXIpICU+JQogIHVuaXF1ZSgpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCkgJT4lCiAgc3VtbWFyaXplKE4gPSBuKCksIAogICAgICAgICAgICBtaW5fYWdlID0gbWluKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbl9mZW1hbGUgPSBzdW0oZ2VuZGVyID09ICdGZW1hbGUnKSwKICAgICAgICAgICAgbl9tYWxlID0gc3VtKGdlbmRlciA9PSAnTWFsZScpLAogICAgICAgICAgICBuX290aGVyID0gc3VtKGdlbmRlciA9PSAnT3RoZXInKSkKc3ViX2luZm8KCmBgYAoKCiMgQWdlbmN5IHRhc2s6IEFnZW5jeSBkZWNpc2lvbnMgCiMjIE1vZGVsOiBBZ2VuY3kgZGVjaXNpb25zIGJ5IFZvQwpgYGB7ciBhZ2VuY3kgbW9kZWx9CiMgc2VsZWN0IHJlbGV2YW50IHZhcmlhYmxlcyAKYWdlbmN5X21vZGVsX2RhdGEgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICBzZWxlY3Qoc3ViamVjdF9pZCwgc3RhZ2VfMV9jaG9pY2UsIHZvYywgY29uZGl0aW9uX3RyaWFsLCBibG9jaywgdHJpYWwsIGFnZSwgYWdlX2dyb3VwKQoKIyMgUkVHUkVTU0lPTiBNT0RFTCAjIwojeiBzY29yZSBjb250aW51b3VzIHZhcmlhYmxlcwphZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkIDwtIGZhY3RvcihhZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkKQphZ2VuY3lfbW9kZWxfZGF0YSR2b2NfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJHZvYykKYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsIDwtIHNjYWxlX3RoaXMoYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsKQphZ2VuY3lfbW9kZWxfZGF0YSRhZ2VfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJGFnZSkKCiNydW4gbW9kZWwKYWdlbmN5X21vZGVsIDwtIG1peGVkKHN0YWdlXzFfY2hvaWNlIH4gIHZvY196ICogY29uZGl0aW9uX3RyaWFsICogYWdlX3ogKyAodm9jX3ogKiBjb25kaXRpb25fdHJpYWwgfHwgc3ViamVjdF9pZCksCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYWdlbmN5X21vZGVsX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIkxSVCIsCiAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfcmUgPSBULAogICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLCBvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKQoKI3Nob3cgbW9kZWwgcmVzdWx0cwphZ2VuY3lfbW9kZWwKc3VtbWFyeShhZ2VuY3lfbW9kZWwpCmBgYAoKCmBgYHtyIGFnZW5jeSBtb2RlbCBwcmludCBtb2RlbCBzdGF0c30KCmFnZW5jeV9tb2RlbC5nbG1lciA9ICBtaXhlZChzdGFnZV8xX2Nob2ljZSB+ICB2b2NfeiAqIGNvbmRpdGlvbl90cmlhbCAqIGFnZV96ICsgKHZvY196ICogY29uZGl0aW9uX3RyaWFsIHx8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGFnZW5jeV9tb2RlbF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJMUlQiLAogICAgICAgICAgICAgICAgICAgICAgZXhwYW5kX3JlID0gVCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSwKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGFnZW5jeV9tb2RlbC5nbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJWb0MiLCAidHJpYWwiLCAiYWdlIiwgIlZvQyB4IHRyaWFsIiwgIlZvQyB4IGFnZSIsICJ0cmlhbCB4IGFnZSIsICJWb0MgeCB0cmlhbCB4IGFnZSIpLAogICAgICAgICAgdHJhbnNmb3JtID0gTlVMTCwKICAgICAgICAgIHNob3cuZXN0ID0gVCwgCiAgICAgICAgICBzaG93LnNlID0gVCwgCiAgICAgICAgICBzaG93LnN0YXQgPSBULAogICAgICAgICAgc2hvdy5jaSA9IEYsCiAgICAgICAgICBzaG93LnJlLnZhciA9IEYsCiAgICAgICAgICBzaG93LmljYyA9IEYsCiAgICAgICAgICBzaG93Lm5ncm91cHMgPSBGLAogICAgICAgICAgc2hvdy5vYnMgPSBGLAogICAgICAgICAgc2hvdy5yMiA9IEYsCiAgICAgICAgICBzdHJpbmcuc2UgPSAiU0UiLAogICAgICAgICAgZW1waC5wID0gRiwKICAgICAgICAgIHN0cmluZy5wcmVkID0gIlByZWRpY3RvciIsCiAgICAgICAgICB0aXRsZSA9ICIiLAogICAgICAgICAgZHYubGFiZWxzID0gIiIpCmBgYAoKIyMgUGxvdDogU2Vuc2l0aXZpdHkgdG8gdGhlIHZhbHVlIG9mIGNob2ljZQpgYGB7ciB2b2MgcGxvdCwgZmlnLmhlaWdodCA9IDQsIGZpZy53aWR0aCA9IDcsIHVuaXQgPSAiaW4ifQojIyBQTE9UICMjCmFnZW5jeV9zdWJfbWVhbnMgPC0gYWdlbmN5X21vZGVsX2RhdGEgJT4lIAogIG11dGF0ZSh0YXNrX2hhbGYgPSBjYXNlX3doZW4odHJpYWwgPCAxNTggfiAiRmlyc3QgSGFsZiBvZiBUYXNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpYWwgPiAxNTcgfiAiU2Vjb25kIEhhbGYgb2YgVGFzayIpKSAlPiUKICBncm91cF9ieSh0YXNrX2hhbGYsIHZvYywgc3ViamVjdF9pZCwgYWdlX2dyb3VwKSAlPiUKICBzdW1tYXJpemUobWVhbl9zdWJfYWdlbmN5ID0gbWVhbihzdGFnZV8xX2Nob2ljZSwgbmEucm0gPSBUKSkKCmFnZW5jeV9tZWFucyA8LSBhZ2VuY3lfc3ViX21lYW5zICU+JSAKICBncm91cF9ieSh0YXNrX2hhbGYsIHZvYywgYWdlX2dyb3VwKSAlPiUKICBzdW1tYXJpemUobWVhbl9hZ2VuY3kgPSBtZWFuKG1lYW5fc3ViX2FnZW5jeSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2VfYWdlbmN5ID0gc2QobWVhbl9zdWJfYWdlbmN5IC8gc3FydChuKCkpKSkKCmFnZW5jeV9wbG90IDwtIGdncGxvdChhZ2VuY3lfbWVhbnMsIGFlcyh4ID0gdm9jLCB5ID0gbWVhbl9hZ2VuY3ksIGNvbG9yID0gYWdlX2dyb3VwKSkgKwogIGZhY2V0X3dyYXAofnRhc2tfaGFsZikgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gYWdlX2dyb3VwKSkgKyAKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhbl9hZ2VuY3kgLSBzZV9hZ2VuY3ksIHltYXggPSBtZWFuX2FnZW5jeSArIHNlX2FnZW5jeSksIHdpZHRoID0gLjEpICsgCiAgZ2VvbV9saW5lKCkgKwogIHZvY190aGVtZSgpICsgCiAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiM3MDI5NjMiLCAiI2MwMDAwMCIsICIjZmZhZTQyIiksIG5hbWUgPSAiQWdlIEdyb3VwIikgKwogIHhsYWIoIlZhbHVlIG9mIENob2ljZSAoVm9DKSIpICsKICB5bGFiKCJQcm9wb3J0aW9uIEFnZW5jeSBDaG9pY2VzIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC41LCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZGFzaGVkIikKYWdlbmN5X3Bsb3QKYGBgCgoKIyMgUGxvdDogU2Vuc2l0aXZpdHkgdG8gdmFsdWUgb2YgY2hvaWNlIHdpdGggY29udGludW91cyBhZ2UgCmBgYHtyIHZvYyBwbG90IGNvbnRpbnVvdXMgYWdlLCBmaWcuaGVpZ2h0ID0gMy45LCBmaWcud2lkdGggPSAzLCB1bml0ID0gImluIn0KCiNydW4gbW9kZWwgd2l0aG91dCBhZ2UgdG8gZ2V0IHJhbmRvbSBlZmZlY3RzIGZvciBlYWNoIHBhcnRpY2lwYW50CmFnZW5jeV9nbG1lciA8LSBtaXhlZChzdGFnZV8xX2Nob2ljZSB+ICB2b2NfeiAqIGNvbmRpdGlvbl90cmlhbCArICh2b2NfeiAqIGNvbmRpdGlvbl90cmlhbCB8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGFnZW5jeV9tb2RlbF9kYXRhLCAKICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLCAKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJMUlQiLAogICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikgCgojZ2V0IGZpeGVkIGVmZmVjdCBvZiB6Vm9DClZvQ19maXhlZGVmZiA8LSBhcy5kYXRhLmZyYW1lKGNvZWYoc3VtbWFyeShhZ2VuY3lfZ2xtZXIpKSkkRXN0aW1hdGVbMl0KVm9DX2ludF9maXhlZGVmZiA8LSBhcy5kYXRhLmZyYW1lKGNvZWYoc3VtbWFyeShhZ2VuY3lfZ2xtZXIpKSkkRXN0aW1hdGVbNF0KCiNnZXQgcmFuZG9tIGVmZmVjdHMKVm9DX2VmZmVjdHMgPC0gcmFuZWYoYWdlbmN5X2dsbWVyKSRzdWJqZWN0X2lkICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJqZWN0X2lkIikKCiNjb21iaW5lIHdpdGggYWdlClZvQ19zdWJFZmZlY3RzIDwtIGFnZW5jeV9tb2RlbF9kYXRhICU+JQogICAgc2VsZWN0KHN1YmplY3RfaWQsIGFnZSkgJT4lIAogICAgdW5pcXVlKCkgJT4lCiAgICBsZWZ0X2pvaW4oVm9DX2VmZmVjdHMsIGJ5ID0gYygic3ViamVjdF9pZCIpKSAlPiUKICAgIG11dGF0ZSh6Vm9DRnVsbCA9IHZvY196ICsgVm9DX2ZpeGVkZWZmLCAKICAgICAgICAgICBpbnRGdWxsID0gYHZvY196OmNvbmRpdGlvbl90cmlhbGAgKyBWb0NfaW50X2ZpeGVkZWZmKQoKI3Bsb3QgYWdlIGJ5IFZvQyBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZSA8LSBnZ3Bsb3QoVm9DX3N1YkVmZmVjdHMsIGFlcyh4ID0gYWdlLCB5ID0gelZvQ0Z1bGwpKSArCiAgICBnZW9tX3BvaW50KGNvbG9yID0gImJsYWNrIikgKyAKICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICJibGFjayIpICsKICAgIHZvY190aGVtZSgpICsgCiAgICB4bGFiKCJBZ2UiKSArCiAgICB5bGFiKCJWb0MgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2UKCiNwbG90IGFnZSBieSBWb0MgeCB0cmlhbCBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZVRyaWFsIDwtIGdncGxvdChWb0Nfc3ViRWZmZWN0cywgYWVzKHggPSBhZ2UsIHkgPSBpbnRGdWxsKSkgKwogICAgZ2VvbV9wb2ludChjb2xvciA9ICJibGFjayIpICsgCiAgICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmxhY2siKSArCiAgICB2b2NfdGhlbWUoKSArIAogICAgeGxhYigiQWdlIikgKwogICAgeWxhYigiVm9DIHggVHJpYWwgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2VUcmlhbApgYGAKCgoKIyMgU3VtbWFyeSBzdGF0czogU2Vuc2l0aXZpdHkgdG8gdmFsdWUgb2YgY29udHJvbApgYGB7ciB2b2Mgc3VtbWFyeSBzdGF0c30KCiMgV2hhdCBwcm9wb3J0aW9uIG9mIHRyaWFscyBkaWQgcGFydGljaXBhbnRzIGNob29zZSBhZ2VuY3kgd2hlbiBWb0Mgd2FzIDA/ClZvQ196ZXJvX21lYW5zX3N1YiA8LSBsZWFybmluZ19kYXRhX2ZpbHRlcmVkICU+JSAKICAgIGZpbHRlcih2b2MgPT0gMCkgJT4lCiAgICBncm91cF9ieShzdWJqZWN0X2lkLCBhZ2VfZ3JvdXApICU+JQogICAgc3VtbWFyaXplKG1lYW5TdWJBZ2VuY3kgPSBtZWFuKHN0YWdlXzFfY2hvaWNlLCBuYS5ybSA9IFQpKQoKVm9DX3plcm9fbWVhbnMgPC0gVm9DX3plcm9fbWVhbnNfc3ViICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzdW1tYXJpemUobWVhbkFnZW5jeSA9IG1lYW4obWVhblN1YkFnZW5jeSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBzZUFnZW5jeSA9IHNkKG1lYW5TdWJBZ2VuY3kgLyBzcXJ0KG4oKSkpKQpWb0NfemVyb19tZWFucwpgYGAKCgojIyBBZ2VuY3kgZGVjaXNpb24gcmVhY3Rpb24gdGltZXMKYGBge3IgYWdlbmN5IFJUIGRhdGEgcHJvY2Vzc2luZ30KCiNjb21wdXRlIFJUCmxlYXJuaW5nX2RhdGFfZmlsdGVyZWQkYWdlbmN5UlQgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCRzdGFnZV8xX3J0IC8gMTAwMAoKI2hvdyBtYW55IFJUcyBmYXN0ZXIgdGhhbiAxMDAgbXM/CmZhc3RSVHMgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICAgIGZpbHRlcihhZ2VuY3lSVCA8IC4xKSAlPiUKICAgIG5yb3coKQoKIzAgZXhjbHVkZWQKCnNsb3dSVHMgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICAgIGZpbHRlcihhZ2VuY3lSVCA+IDMwKSAlPiUKICAgIG5yb3coKQoKIzAgZXhjbHVkZWQKCmJhbmRpdFRhc2suUlQuZGF0YSA8LSBsZWFybmluZ19kYXRhX2ZpbHRlcmVkICU+JQogICAgZmlsdGVyKGFnZW5jeVJUID4gLjEpICU+JQogICAgZmlsdGVyKGFnZW5jeVJUIDwgMzApICU+JQogICAgbXV0YXRlKGFnZW5jeUxvZ1JUID0gbG9nKGFnZW5jeVJUKSkKYGBgCgojIyBNb2RlbDogQWdlbmN5IFJUcyBieSBWb0MKYGBge3Igdm9jIFJUIG1vZGVsfQoKI2NvbXB1dGUgYWJzKHZvYykgdmFyaWFibGUKYmFuZGl0VGFzay5SVC5kYXRhJGFic1ZvQyA8LSBhYnMoYmFuZGl0VGFzay5SVC5kYXRhJHZvYykKCiNzY2FsZSB2YXJpYWJsZXMKYmFuZGl0VGFzay5SVC5kYXRhJHpBZ2UgPC0gc2NhbGUoYmFuZGl0VGFzay5SVC5kYXRhJGFnZSkKYmFuZGl0VGFzay5SVC5kYXRhJHpWb0MgPC0gc2NhbGUoYmFuZGl0VGFzay5SVC5kYXRhJHZvYykKYmFuZGl0VGFzay5SVC5kYXRhJHpBYnNWb0MgPC0gc2NhbGUoYmFuZGl0VGFzay5SVC5kYXRhJGFic1ZvQykKYmFuZGl0VGFzay5SVC5kYXRhJHpUcmlhbE9mQ29uZCA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkY29uZGl0aW9uX3RyaWFsKQoKYWdlbmN5LlJULm1vZGVsIDwtIG1peGVkKGFnZW5jeUxvZ1JUIH4gekFnZSAqIHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgKyAoekFic1ZvQyAqIHpUcmlhbE9mQ29uZCB8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGJhbmRpdFRhc2suUlQuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJTIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWxtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSkKCmFnZW5jeS5SVC5tb2RlbApzdW1tYXJ5KGFnZW5jeS5SVC5tb2RlbCkKCiNlZmZlY3RzIG9mCiMgYWdlCiMgVm9DCiMgdHJpYWwgb2YgY29uZGl0aW9uCgojbm8gaW50ZXJhY3Rpb25zCmBgYAoKCmBgYHtyIGFnZW5jeSBSVHMgbW9kZWwgcHJpbnQgbW9kZWwgc3RhdHN9CgphZ2VuY3kuUlQubG1lciA8LSBtaXhlZChhZ2VuY3lMb2dSVCB+IHpBZ2UgKiB6QWJzVm9DICogelRyaWFsT2ZDb25kICsgKHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgfCBzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLlJULmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiUyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1sbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikKCnRhYl9tb2RlbChhZ2VuY3kuUlQubG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJhZ2UiLCAiVm9DIG1hZ25pdHVkZSIsICJ0cmlhbCIsICJhZ2UgeCBWb0MgbWFnbml0dWRlIiwgImFnZSB4IHRyaWFsIiwgIlZvQyBtYWduaXR1ZGUgeCB0cmlhbCIsICJhZ2UgeCBWb0MgbWFnbml0dWRlIHggdHJpYWwiKSwKICAgICAgICAgIHRyYW5zZm9ybSA9IE5VTEwsCiAgICAgICAgICBzaG93LmVzdCA9IFQsIAogICAgICAgICAgc2hvdy5zZSA9IFQsIAogICAgICAgICAgc2hvdy5mc3RhdCA9IFQsCiAgICAgICAgICBzaG93LmNpID0gRiwKICAgICAgICAgIHNob3cucmUudmFyID0gRiwKICAgICAgICAgIHNob3cuaWNjID0gRiwKICAgICAgICAgIHNob3cubmdyb3VwcyA9IEYsCiAgICAgICAgICBzaG93Lm9icyA9IEYsCiAgICAgICAgICBzaG93LnIyID0gRiwKICAgICAgICAgIHN0cmluZy5zZSA9ICJTRSIsCiAgICAgICAgICBlbXBoLnAgPSBGLAogICAgICAgICAgc3RyaW5nLnByZWQgPSAiUHJlZGljdG9yIiwKICAgICAgICAgIHRpdGxlID0gIiIsCiAgICAgICAgICBkdi5sYWJlbHMgPSAiIikKYGBgCgojIyBQbG90OiBBZ2VuY3kgUlRzIGJ5IFZvQwpgYGB7ciBhZ2VuY3kgUlQgYnkgVm9DLCBmaWcuaGVpZ2h0ID0gNCwgZmlnLndpZHRoID0gOCwgdW5pdHMgPSAiaW4ifQoKYWdlbmN5UlQubWVhbnMuc3ViIDwtIGJhbmRpdFRhc2suUlQuZGF0YSAlPiUKICAgIGdyb3VwX2J5KHZvYywgYWdlX2dyb3VwLCBzdWJqZWN0X2lkKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuU3ViUlQgPSBtZWFuKGFnZW5jeVJUKSwKICAgICAgICAgICAgICBtZWFuU3ViTG9nUlQgPSBtZWFuKGFnZW5jeUxvZ1JUKSkKCiNjb21wdXRlIG1lYW5zIGFuZCBTRHMKYWdlbmN5UlQubWVhbnMgPC0gYWdlbmN5UlQubWVhbnMuc3ViICAlPiUKICAgIGdyb3VwX2J5KHZvYywgYWdlX2dyb3VwKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuUlQgPSBtZWFuKG1lYW5TdWJSVCksCiAgICAgICAgICAgICAgbWVhbkxvZ1JUID0gbWVhbihtZWFuU3ViTG9nUlQpLAogICAgICAgICAgICAgIHNlUlQgPSBzZChtZWFuU3ViUlQpLyBzcXJ0KG4oKSksCiAgICAgICAgICAgICAgc2VMb2dSVCA9IHNkKG1lYW5TdWJMb2dSVCkvIHNxcnQobigpKSkKCmFnZW5jeVJULlZvQy5wbG90IDwtIGdncGxvdChhZ2VuY3lSVC5tZWFucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IHZvYywgeSA9IG1lYW5SVCkpICsKICAgIGZhY2V0X3dyYXAofmFnZV9ncm91cCkgKwogICAgZ2VvbV9wb2ludChzaXplID0gMywgYWVzKGNvbG9yPSBhZ2VfZ3JvdXApKSArCiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhblJUIC0gc2VSVCwgeW1heCA9IG1lYW5SVCArIHNlUlQsIGNvbG9yID0gYWdlX2dyb3VwKSwgd2lkdGggPSAuMSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMykpICsKICAgIHhsYWIoIlZhbHVlIG9mIENob2ljZSIpICsKICAgICB5bGFiKCJNZWFuIEFnZW5jeSBEZWNpc2lvbiBUaW1lIChzKSIpICsKICAgIHZvY190aGVtZSgpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYWdlbmN5UlQuVm9DLnBsb3QKYGBgCgojIEFnZW5jeSB0YXNrOiBNYWNoaW5lIHNlbGVjdGlvbgojIyBNb2RlbDogT3B0aW1hbCBtYWNoaW5lIGNob2ljZXMgYWNyb3NzIHRyaWFscyBieSBjb25kaXRpb24gYW5kIGFnZQpgYGB7ciBtYWNoaW5lIHNlbGVjdGlvbiBkZWNpc2lvbnN9CiMgc2VsZWN0IHZhcmlhYmxlcyBmb3IgaW5jbHVzaW9uIGluIG1peGVkLWVmZmVjdHMgbW9kZWwgKG5vIGFnZSBmb3Igbm93KQptYWNoaW5lX21vZGVsX2RhdGEgPC0gbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCAlPiUKICBmaWx0ZXIoc3RhZ2VfMV9jaG9pY2UgPT0gMSkgJT4lCiAgZmlsdGVyKGNvbnRleHQgPCAyKSAlPiUKICBzZWxlY3Qoc3ViamVjdF9pZCwgc3RhZ2VfMl9hY2MsIGNvbnRleHQsIGNvbmRpdGlvbl90cmlhbCwgYmxvY2ssIGFnZSwgYWdlX2dyb3VwKSAlPiUKICBkcm9wX25hKCkKCiMjIFJFR1JFU1NJT04gTU9ERUwgIyMKI3ogc2NvcmUgY29udGludW91cyB2YXJpYWJsZXMKbWFjaGluZV9tb2RlbF9kYXRhJHN1YmplY3RfaWQgPC0gZmFjdG9yKG1hY2hpbmVfbW9kZWxfZGF0YSRzdWJqZWN0X2lkKQptYWNoaW5lX21vZGVsX2RhdGEkY29udGV4dCA8LSBmYWN0b3IobWFjaGluZV9tb2RlbF9kYXRhJGNvbnRleHQpCm1hY2hpbmVfbW9kZWxfZGF0YSRjb25kaXRpb25fdHJpYWwgPC0gc2NhbGVfdGhpcyhtYWNoaW5lX21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsKQptYWNoaW5lX21vZGVsX2RhdGEkYWdlX3ogPC0gc2NhbGVfdGhpcyhtYWNoaW5lX21vZGVsX2RhdGEkYWdlKQoKI3J1biBtb2RlbAptYWNoaW5lX21vZGVsIDwtIG1peGVkKHN0YWdlXzJfYWNjIH4gIGNvbnRleHQgKiBjb25kaXRpb25fdHJpYWwgKiBhZ2VfeiArIChjb250ZXh0ICogY29uZGl0aW9uX3RyaWFsIHx8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1hY2hpbmVfbW9kZWxfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZF9yZSA9IFQsCiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWdsbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSkpCgojc2hvdyBtb2RlbCByZXN1bHRzCm1hY2hpbmVfbW9kZWwKc3VtbWFyeShtYWNoaW5lX21vZGVsKQpgYGAKCgpgYGB7ciBtYWNoaW5lIG1vZGVsIHByaW50IG1vZGVsIHN0YXRzfQoKbWFjaGluZV9tb2RlbC5nbG1lciA8LSBtaXhlZChzdGFnZV8yX2FjYyB+IGNvbnRleHQgKiBjb25kaXRpb25fdHJpYWwgKiBhZ2VfeiArIChjb250ZXh0ICogY29uZGl0aW9uX3RyaWFsIHx8IHN1YmplY3RfaWQpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1hY2hpbmVfbW9kZWxfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZF9yZSA9IFQsCiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPWdsbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikKCnRhYl9tb2RlbChtYWNoaW5lX21vZGVsLmdsbWVyLCAKICAgICAgICAgIHByZWQubGFiZWxzID0gYygiaW50ZXJjZXB0IiwgImNvbmRpdGlvbiIsICJ0cmlhbCIsICJhZ2UiLCAiY29uZGl0aW9uIHggdHJpYWwiLCAiY29uZGl0aW9uIHggYWdlIiwgInRyaWFsIHggYWdlIiwgImNvbmRpdGlvbiB4IHRyaWFsIHggYWdlIiksCiAgICAgICAgICB0cmFuc2Zvcm0gPSBOVUxMLAogICAgICAgICAgc2hvdy5lc3QgPSBULCAKICAgICAgICAgIHNob3cuc2UgPSBULCAKICAgICAgICAgIHNob3cuc3RhdCA9IFQsCiAgICAgICAgICBzaG93LmNpID0gRiwKICAgICAgICAgIHNob3cucmUudmFyID0gRiwKICAgICAgICAgIHNob3cuaWNjID0gRiwKICAgICAgICAgIHNob3cubmdyb3VwcyA9IEYsCiAgICAgICAgICBzaG93Lm9icyA9IEYsCiAgICAgICAgICBzaG93LnIyID0gRiwKICAgICAgICAgIHN0cmluZy5zZSA9ICJTRSIsCiAgICAgICAgICBlbXBoLnAgPSBGLAogICAgICAgICAgc3RyaW5nLnByZWQgPSAiUHJlZGljdG9yIiwKICAgICAgICAgIHRpdGxlID0gIiIsCiAgICAgICAgICBkdi5sYWJlbHMgPSAiIikKYGBgCgojIyBQbG90OiBQcm9wb3J0aW9uIG9wdGltYWwgbWFjaGluZSBzZWxlY3Rpb25zIGFjcm9zcyBhZ2UgZ3JvdXBzIGFuZCB0cmlhbHMKYGBge3IgcGxvdCBiYW5kaXQgY2hvaWNlcyBhY3Jvc3MgdHJpYWxzLCB3aWR0aCA9IDcsIGhlaWdodCA9IDQsIHVuaXQgPSAiaW4ifQoKIyMgUExPVCAjIwptYWNoaW5lX3NlbGVjdGlvbl9zdWJfbWVhbnMgPC0gbWFjaGluZV9tb2RlbF9kYXRhICU+JQogIGdyb3VwX2J5KGNvbnRleHQsIGJsb2NrLCBzdWJqZWN0X2lkLCBhZ2VfZ3JvdXApICU+JSAKICBzdW1tYXJpemUoc3ViX2FjYyA9IG1lYW4oc3RhZ2VfMl9hY2MsIG5hLnJtID0gVCkpCgptYWNoaW5lX3NlbGVjdGlvbl9tZWFucyA8LSBtYWNoaW5lX3NlbGVjdGlvbl9zdWJfbWVhbnMgJT4lCiAgZ3JvdXBfYnkoY29udGV4dCwgYmxvY2ssIGFnZV9ncm91cCkgJT4lIAogIHN1bW1hcml6ZShtZWFuX2FjYyA9IG1lYW4oc3ViX2FjYyksCiAgICAgICAgICAgIHNlID0gc2Qoc3ViX2FjYykvc3FydChuKCkpKQoKbWFjaGluZV9zZWxlY3Rpb25fcGxvdCA8LSBnZ3Bsb3QobWFjaGluZV9zZWxlY3Rpb25fbWVhbnMsIGFlcyh4PWJsb2NrLCB5PW1lYW5fYWNjLCBjb2xvcj1mYWN0b3IoY29udGV4dCkpKSArCiAgZmFjZXRfd3JhcCh+YWdlX2dyb3VwKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKwogIGdlb21faml0dGVyKGRhdGEgPSBtYWNoaW5lX3NlbGVjdGlvbl9zdWJfbWVhbnMsICBhZXMoeD1ibG9jaywgeT1zdWJfYWNjLCBjb2xvcj1mYWN0b3IoY29udGV4dCkpLCBzaXplID0gLjUpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhZXMoZmlsbCA9IGZhY3Rvcihjb250ZXh0KSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAuNSwgbGluZXR5cGU9ImRhc2hlZCIpICsKICB5bGFiKCJQcm9wb3J0aW9uIE9wdGltYWwgTWFjaGluZSBTZWxlY3Rpb25zIikgKwogIHhsYWIoIkJsb2NrIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQsIDgsIDEyKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWU9IkNvbnRleHQiLAogICAgICAgICAgICAgICAgICAgIGxhYmVscz1jKCI5MC8xMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjcwLzMwIiksCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzPWMoY29sb3IxLCBjb2xvcjMpLCAKICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlPVRSVUUpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWU9IkNvbnRleHQiLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHM9YygiOTAvMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNzAvMzAiKSwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPWMoY29sb3IxLCBjb2xvcjMpLAogICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlPVRSVUUpKSArCiAgdm9jX3RoZW1lKCkgKwogIHRoZW1lKHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMikpCm1hY2hpbmVfc2VsZWN0aW9uX3Bsb3QKYGBgCgoKCgojIEV4cGxpY2l0IHJld2FyZCBrbm93bGVkZ2UgdGFzayAKIyMgRXhwbGljaXQgcmV3YXJkIGtub3dsZWRnZSB0YXNrOiBzdW1tYXJ5IHN0YXRzCmBgYHtyIGV4cGxpY2l0IGtub3dsZWRnZSB0YXNrfQoKIyBSZWFkIGluIGRhdGEKZXhwbGljaXRLbm93IDwtIHJlYWRfY3N2KCdkYXRhL3Byb2Nlc3NlZC9leHBsaWNpdF9kYXRhLmNzdicpIAojZXhwbGljaXRLbm93JHN1YmplY3RfaWQgPC0gZmFjdG9yKGV4cGxpY2l0S25vdyRzdWJqZWN0X2lkKQoKI2NvbWJpbmUgd2l0aCBhZ2UKZXhwbGljaXRLbm93IDwtIGZ1bGxfam9pbihleHBsaWNpdEtub3csIHBhcnRpY2lwYW50X2FnZXMsIGJ5ID0gYygic3ViamVjdF9pZCIpKQoKZXhwbGljaXRLbm93ICU+JSAKICBncm91cF9ieShzdWJqZWN0X2lkLCBhZ2UpICU+JSAKICBzdW1tYXJpemUobSA9IG1lYW4oZXJyb3IpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzdW1tYXJpemUobWVhbkVyciA9IG1lYW4obSwgbmEucm09VCksIHNkID0gc2QobSwgbmEucm0gPSBUKSkKYGBgCgojIyBNb2RlbDogRXhwbGljaXQgcmV3YXJkIGtub3dsZWRnZSBieSBhZ2UgYW5kIHRydWUgcHJvYmFiaWxpdGllcwpgYGB7ciBleHBsaWNpdCBrbm93bGVkZ2UgbW9kZWx9CgojcmUtc2NhbGUgYWdlIGFuZCB6VHJ1ZVByb2IKZXhwbGljaXRLbm93LmZpbHRlcmVkIDwtIGV4cGxpY2l0S25vdyAlPiUKICAgIHNlbGVjdChzdWJqZWN0X2lkLCBhZ2UsIHRydWVfcHJvYiwgZXJyb3IpICU+JQogICAgZHJvcF9uYSgpCgpleHBsaWNpdEtub3cuZmlsdGVyZWQkekFnZSA8LSBzY2FsZShleHBsaWNpdEtub3cuZmlsdGVyZWQkYWdlKQpleHBsaWNpdEtub3cuZmlsdGVyZWQkelRydWVQcm9iIDwtIHNjYWxlKGV4cGxpY2l0S25vdy5maWx0ZXJlZCR0cnVlX3Byb2IpCgojIHJ1biBtb2RlbApleHBsaWNpdEtub3dfZXJyb3JieVRydWVQcm9iQWdlLm1peGVkIDwtIG1peGVkKGVycm9yIH4gelRydWVQcm9iKnpBZ2UgKyAoMXxzdWJqZWN0X2lkKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGV4cGxpY2l0S25vdy5maWx0ZXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiUyIpIApleHBsaWNpdEtub3dfZXJyb3JieVRydWVQcm9iQWdlLm1peGVkCnN1bW1hcnkoZXhwbGljaXRLbm93X2Vycm9yYnlUcnVlUHJvYkFnZS5taXhlZCkKYGBgCgojIyBQbG90OiBFeHBsaWNpdCByZXdhcmQga25vd2xlZGdlCmBgYHtyIHBsb3QgZXhwbGljaXQga25vd2xlZGdlfQoKZXhwbGljaXRLbm93IDwtIGV4cGxpY2l0S25vdyAlPiUKICBtdXRhdGUoYWdlX2dyb3VwID0gY2FzZV93aGVuKGFnZSA8IDEzIH4gJ0NoaWxkcmVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZSA8IDE4ICYgYWdlID4gMTIuOTkgfiAnQWRvbGVzY2VudHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlID4gMTggfiAnQWR1bHRzJykpCgpleHBsaWNpdEtub3ckYWdlX2dyb3VwIDwtIGZhY3RvcihleHBsaWNpdEtub3ckYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCgojIHBsb3QgcmVzcG9uc2UgYnkgYmFuZGl0CmV4cGxpY2l0S25vdyAlPiUgZHJvcF9uYSgpICU+JQogICAgZ2dwbG90KC4sIGFlcyh4PWZhY3Rvcih0cnVlX3Byb2IpLCB5PXJlc3BvbnNlLCBmaWxsPWFnZV9ncm91cCkpICsKICAgIGdlb21fYm94cGxvdCgpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMyksIG5hbWUgPSAiQWdlIEdyb3VwIikgKwogICAgeWxhYigiUmVwb3J0ZWQgUmV3YXJkIFByb2JhYmlsaXR5IikgKwogICAgeGxhYigiVHJ1ZSBSZXdhcmQgUHJvYmFiaWxpdHkiKSArCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIjEwJSIsICIzMCUiLCAiNTAlIiwgIjcwJSIsICI5MCUiKSkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMTAlIiwgIjIwJSIsICIzMCUiLCAiNDAlIiwgIjUwJSIsICI2MCUiLCAiNzAlIiwgIjgwJSIsICI5MCUiLCAiMTAwJSIpKSArCiAgICB2b2NfdGhlbWUoKQpgYGAK